package miguel.seriesly;

import miguel.objects.Serie;
import miguel.objects.SerieExtendida;
import miguel.utils.DownloadHelper;
import miguel.utils.ManejoSD;
import miguel.utils.SeriesLySQLiteHelper;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class PantallaCambios extends Activity {

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pantallacambios);
		
		new cargarNuevasSeries().execute();
	}
	
	private class cargarNuevasSeries extends AsyncTask<String, Void, Void> {
		ProgressDialog pd;
		MisSeriesAdapter adaptador;
	
		//Método que se hace en segundo plano
		@Override
		protected Void doInBackground(String... params) {
			//Cargamos el contenido de la serie
	    	adaptador = new MisSeriesAdapter();
	    	
			return null;
		}
		
		//Método que se llama al terminal doInBackground
		@Override
		protected void onPostExecute(Void result) {
			//Si está cargado el ProgressBar lo descargamos
			if(pd != null) {
				pd.dismiss();
				pd = null;
			}
			
			//Mostramos el contenido en la lista
			ListView lista = (ListView)findViewById(R.id.lstNuevasSeries);
			lista.setAdapter(adaptador);
		}
		
		//Método que se llama al principio de la ejecución
		@Override
		protected void onPreExecute() {
			//Inicializamos el ProgressDialog
			pd = new ProgressDialog(PantallaCambios.this, R.style.FondoTransparente);
			pd.setTitle(R.string.espere);
			pd.setMessage(getString(R.string.cargandoSeries));
			pd.setCancelable(false);
			pd.show();
			
			super.onPreExecute();
		}
	}
	
	private void mostrarSerie(Serie s) {
		Intent intent = new Intent(PantallaCambios.this, PantallaVerDatosSerie.class);
		
		intent.putExtra("idSerie", s.getIdSerie());
		startActivity(intent);
	}

	private class MisSeriesAdapter extends BaseAdapter {
		SerieExtendida[] series = new SerieExtendida[0];
		Bitmap[] imagenesSeries;

		public MisSeriesAdapter() {
			SeriesLySQLiteHelper sqlSeries = new SeriesLySQLiteHelper(PantallaCambios.this, "DB_SeriesLy", null, 1);
			
			SerieExtendida[] todasSeries = sqlSeries.obtenerSeries();
			
			int contadorSeriesNuevas = 0;
			for(int i=0; i<todasSeries.length; i++) {
				if(todasSeries[i].esNueva() == 1) {
					contadorSeriesNuevas++;
				}
			}
			
			series = new SerieExtendida[contadorSeriesNuevas];
			//Guardamos las series
			int numSeriesCargadas = 0;
			for(int i=0; i<todasSeries.length; i++) {
				if(todasSeries[i].esNueva() == 1) {
					series[numSeriesCargadas] = todasSeries[i];
					numSeriesCargadas++;
				}
			}
			
			//Cargamos las imagenes
			imagenesSeries = new Bitmap[series.length];
			ManejoSD manejoSD = new ManejoSD();
			for(int i=0; i<series.length; i++) {
				//Intentamos cargar la imagen de la tarjeta externa
				String urlSmallThumb = series[i].getSmall_thumb();
				String nombreSmallThumb = urlSmallThumb.split("/")[urlSmallThumb.split("/").length - 1];
				Bitmap imagenSerie = manejoSD.cargarImagen("small_thumb", nombreSmallThumb);
				//Si no se pudo bajar la descargamos
				if(imagenSerie == null) {
		            imagenSerie = new DownloadHelper().getImageBitmap(series[i].getSmall_thumb());
		            //Y la guardamos en la tarjeta externa de memoria del móvil
					manejoSD.guardarImagenes("small_thumb", nombreSmallThumb, imagenSerie);
				}
				imagenesSeries[i] = imagenSerie;
			}
		}

		@Override
		public int getCount() {
			return series.length;
		}

		@Override
		public Serie getItem(int position) {
			return series[position];
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View v = convertView;
			final Serie s = getItem(position);
			
			if(v == null) {
				v = View.inflate(PantallaCambios.this, R.layout.listitemverseries, null);
				v.setClickable(true);
				v.setFocusable(true);
				
				//Cuado clickamos sobre la serie
				v.setOnClickListener(new View.OnClickListener() {
					@Override
					public void onClick(View v) {
						mostrarSerie(s);
					}
				});
			}
			
			TextView text = (TextView) v.findViewById(R.id.nombreSerie);
			ImageView img = (ImageView) v.findViewById(R.id.imgSerie);
			
			text.setText(s.getTitle());
			
			img.setImageBitmap(imagenesSeries[position]);

			return v;
		}
	}
}
